using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for CuentasCtrl
/// </summary>
public class CuentasCtrl
{
    private CuentasBD bdCuentas;
    private EmpleadosCtrl ctrlEmpleados;
    private PerfilesCtrl ctrlPerfiles;
    private static CuentasEnt entCuenta;
    private AtributosCtrl atributos;
    


	public CuentasCtrl()
	{
        bdCuentas = new CuentasBD();
        ctrlEmpleados = new EmpleadosCtrl();
        ctrlPerfiles = new PerfilesCtrl();
        this.atributos = new AtributosCtrl();
	}
    //Obtiene y retorna un dataTable con la informacion de cuentas
    public DataTable ActualizarGrid()
    {
        return this.bdCuentas.ConsultarCuentas();
    }
    //Recibe el id de una cuenta y consulta la cuenta con ese id almacenando los datos
    //en un objeto entidad y retorna ese objeto con la informacion de la cuenta consultada
    public CuentasEnt ConsultarCuenta(int id)
    {
        entCuenta = this.bdCuentas.ConsultarCuenta(id);
        return entCuenta;
    }
    //Encapsula los datos de la nueva cuenta( nombreUsuario y password ) creando un nuevo objeto 
    //entidad de cuentas y envia el objeto como parametro al metodo InsertarCuenta de la controladora
    //de base de datos. Retorna true si se realizo la insercion con exito y false en caso contrario
    public CuentasEnt ConsultarCuenta(string nombreUsuario, string password)
    {
        return this.bdCuentas.ConsultarCuenta(nombreUsuario, password);
    }
    //Se llama al metodo eliminar de la controladora base de datos enviado como parametro
    //el id de la ultima cuenta consultada.Retorna true si se realizo la eliminacion con exito 
    //y false en caso contrario
    public bool InsertarCuenta(string usuario, string contrasena, string perfil, string nombre)
    {
        CuentasEnt Cuenta = new CuentasEnt(usuario, contrasena, perfil, nombre);
        return this.bdCuentas.InsertarCuenta(Cuenta);
    }
    //Preguta si el id de la cuenta que quiere eliminar es el id de mi propia cuenta entonces resultado es false
    //En caso contrario se llama al metodo eliminar de la controladora base de datos enviado como parametro
    //el id de la ultima tarea consultada.Retorna true si se realizo la eliminacion con exito 
    //y false en caso contrario
    public bool EliminarCuenta(int id)
    {
        bool resultado = false;
        if (id != entCuenta.Id)
        {
            resultado = this.bdCuentas.EliminarCuenta(entCuenta.Id);
        }

        return resultado;
    }
    //Encapsula los datos recibidos por parametro junto con el ID de la ultima cuenta
    //consultada y envia el objeto creado como parametro al metodo ActuliazarCuenta de 
    //controladora de base de datos. Retorna true si se realizo la modificacion con exito 
    //y false en caso contrario
    public bool ActualizarCuenta(string contrasena, string perfil)
    {
        CuentasEnt Cuenta = new CuentasEnt(entCuenta.Id,entCuenta.Usuario, contrasena, perfil, entCuenta.Nombre);
        return this.bdCuentas.ActualizarCuenta(Cuenta);
    }
    //Obtiene y retorna un dataTable con los nombres de los empleados que no poseen cuenta
    //llamando al metodo ConsultarEmpleadosSinCuenta de la controladora de empleados
    public DataTable ConsultarEmpleadosSinCuenta()
    {
        return this.ctrlEmpleados.ConsultarEmpleadosSinCuenta();
    }
    //Obtiene y retorna un dataTable con los perfiles existentes llamando al metodo 
    //de la controladora de perfiles
    public DataTable ConsultarPerfiles()
    {
        return this.ctrlPerfiles.ActualizarGrid();
    }
    //Retorna todos los atributos de modulo
    public AtributosCtrl SolicitarEstadoAtributos()
    {
        return this.atributos;
    }
    //Realiza la accion correspondiente al estado en el que se encuentra
    //segun el primer parametro, si es true modifica de lo contario inserta.
    //Retorna true si la operacion realizada fue exitosa y false en caso contrario
    public bool AccionesAceptar(bool modificando, string usuario, string contrasena, string perfil, string nombre)
    {
        bool resultado;

        if (modificando)
        {
            resultado = this.ActualizarCuenta(contrasena, perfil);
        }
        else
        {
            resultado = this.InsertarCuenta(usuario, contrasena, perfil, nombre);
        }

        return resultado;
    }

}
